
package hibernate.xml02;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
	private static SessionFactory factory;
	static {
		try {
			Configuration cfg = new Configuration().configure();
			factory = cfg.buildSessionFactory();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/*
	 * 一个类的运行，JVM做会以下几件事情 1、类装载 2、链接 3、初始化 4、实例化； 而初始化阶段做的事情是初始化静态变量和执行静态方法等的工作。
	 * 所以在调用类HibernateSessionFactory.java初始化的时候就调用了static块。
	 * 为什么要用static块，还要把构造函数写成private？ 这就是单例(态)模式。能够确保整个程序中同一时间只能有一个class的实例存在，
	 * 这有涉及到了单线程和多线程，还有垃圾处理等。
	 */
	public static SessionFactory getSessionFactory() {
		return factory;
	}

	public static Session getSession() {
		return factory.openSession();
	}

	public static void closeSession(Session session) {
		if (session != null) {
			if (session.isOpen()) {
				session.close();
			}
		}
	}
}
